package com.frog.common.util;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.lang.reflect.Field;


public class ReflectionUtil {

    private static Logger log = LoggerFactory.getLogger(ReflectionUtil.class);

    /**
     * 使用反射给对象属性赋值
     *
     * @param obj   目标对象
     * @param name  属性名
     * @param value 属性值
     * @throws IllegalAccessException 如果属性不可访问
     */
    public static void setFieldValue(Object obj, String name, Object value) {
        Field field = null;
        try {
            // 获取属性Field对象
            field = obj.getClass().getDeclaredField(name);
        } catch (NoSuchFieldException noSuchFieldException) {
            log.error("setFieldValue {} 字段不存在", name, noSuchFieldException);
        }
        if (field != null) {
            // 设置属性可访问
            field.setAccessible(true);
            try {
                // 给属性赋值
                field.set(obj, value);
            } catch (IllegalAccessException illegalAccessException) {
                log.error("setFieldValue  name:{}  value:{}  set赋值失败", name, value, illegalAccessException);
            }
        }
    }


    /**
     * 获取指定对象的属性值。
     *
     * @param obj       要获取属性值的对象
     * @param fieldName 属性名称
     * @return 属性值，如果属性为 null 则返回指定默认值
     */
    public static Object getFieldValue(Object obj, String fieldName) {
        try {
            Field field = obj.getClass().getDeclaredField(fieldName);
            field.setAccessible(true);
            return field.get(obj);
        } catch (NoSuchFieldException | IllegalAccessException e) {
            e.printStackTrace();
            return null;
        }
    }

}